/*----------------------------------------------------------------------------*/
/* Nombre archivo:      OrgSistemasException.java                             */
/* Descripción:         Maneja las excepciones que se generan en              */
/*                      cualquiera de los casos no tenidos en cuenta.         */
/* Autor:               Adalberto Montes Hernández                            */
/* Fecha:               Junio 16/2011                                         */
/* Última modificación: Junio 16/2011                                         */
/* Version:             1.0                                                   */
/*----------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------------
 Historico
 Junio 16/2011 archivo creado.

 -----------------------------------------------------------------------------*/

package co.edu.udea.herbario.exception;

import co.edu.udea.herbario.util.ConstantesStatic;
import co.edu.udea.herbario.util.CorreoAdmin;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.ResourceBundle;
import org.apache.log4j.Logger;

/**
 * Maneja las excepciones que se generan en general.
 * Debe existir el proyecto la libreria log4j
 * @author Adalberto Montes
 * @version 1.0, Junio 16/2011
 * @since 1.5(JDK), Junio 16/2011
 */
public class OrgSistemasException extends Exception
{
    /**
     * Objeto para el manejo de las excepciones
     */
    private Logger logger = Logger.getLogger(getClass());

    /**
     * Captura la excepcion solamente con el mensaje tipo string y envía el registro al archivo de log
     * @param mensaje Mensaje de la excepcion que se produjo
     */
    public OrgSistemasException(String mensaje)
    {
        super(mensaje); //constructor con parametro de Exception
        logger.error(mensaje);
    }

    /**
     * Lanza la excepcion y envía el registro al archivo de log.
     * Envía el registro del error y el printStackTrace por mail, si está configurado así en el archivo de propiedades orgSistemas.properties
     * Deben existir en el archivo de properties los parámetros exception.correoDestinoGral, exception.asuntoCorreo y exception.correoOrigen
     * @param causa Excepcion que se produjo
     */
    public OrgSistemasException(Throwable causa)
    {
        super(causa); //constructor para la clase de la que hereda
        logger.error(causa, causa);
        try
        {
            ResourceBundle bundle = ResourceBundle.getBundle(ConstantesStatic.PROPERTIES_ORGSISTEMAS);
            if(bundle.getString("exception.enviarCorreoGral").equals("true"))
            {
                StringWriter strWrite = new StringWriter();
                causa.printStackTrace(new PrintWriter(strWrite));
                CorreoAdmin.getInstance().enviar(bundle.getString("exception.correoDestinoGral"),
                        bundle.getString("exception.asuntoCorreo") + " - Dto", strWrite.toString(),
                        bundle.getString("exception.correoOrigen"), null);
            }
        }
        catch(Exception e)
        {

        }
    }
}